/************************************************************************
 * The code is owned by mainframer.cn and Shang Tao
 * Without aproval of mainframer.cn and Shang Tao, removing the copyright
 * infomation is regarded as invassion of proprietary copyright
 ***********************************************************************/
package com.mr.qa.dao.impl;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.criterion.Example;

import com.mr.qa.bo.MyLink;

/**
 */
public class MyLinkDAO extends BaseHibernateDAO {

    private static final Log log = LogFactory.getLog(MyLinkDAO.class);

	//property constants

    
    public void save(MyLink transientInstance) {
        log.debug("saving MyLink instance");
        try {
            getSession().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
    
        public int countAllMyLinks(Integer userId)
        {
            String queryString = "select count(*) from MyLink " +
            "as model where model.mrIaskUser.id = "+userId;
            Query queryObject = getSession().createQuery(queryString);
            long longCount = (Long)queryObject.uniqueResult();
            return new Integer(longCount+"");
        }
    
    
	public void delete(MyLink persistentInstance)
        {
            log.debug("deleting MyLink instance");
            try
            {
                getSession().delete(persistentInstance);
                log.debug("delete successful");
            }
            catch(RuntimeException re)
            {
                log.error("delete failed", re);
                throw re;
            }
        }
    
    public MyLink findById( java.lang.Integer id) {
        log.debug("getting MyLink instance with id: " + id);
        try {
            MyLink instance = (MyLink) getSession()
                    .get("com.mr.qa.bo.MyLink", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
    
    
    public List findByExample(MyLink instance) {
        log.debug("finding MyLink instance by example");
        try {
            List results = getSession()
                    .createCriteria("com.mr.qa.bo.MyLink")
                    .add(Example.create(instance))
            .list();
            log.debug("find by example successful, result size: " + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }    
    
    public boolean isAddedBefore(Integer questionId, Integer userId)
    {
      try
      {
         String queryString = "select count(*) from MyLink as model where " +
                 "model.mrIaskQuestion.id = ? and model.mrIaskUser.id = ?";
         Query queryObject = getSession().createQuery(queryString);
		 queryObject.setParameter(0, questionId);
         queryObject.setParameter(1, userId);
         long longCount = (Long)queryObject.uniqueResult();
		 if(longCount > 0)
         {
             return true;
         }
         else
         {
            return false;
         }
      }
      catch (RuntimeException re)
      {
         log.error("find by property name failed", re);
         throw re;
      }
    }

    public List findByProperty(String propertyName, Object value) {
      log.debug("finding MyLink instance with property: " + propertyName
            + ", value: " + value);
      try {
         String queryString = "from MyLink as model where model." 
         						+ propertyName + "= ?";
         Query queryObject = getSession().createQuery(queryString);
		 queryObject.setParameter(0, value);
		 return queryObject.list();
      } catch (RuntimeException re) {
         log.error("find by property name failed", re);
         throw re;
      }
	}

    public MyLink merge(MyLink detachedInstance) {
        log.debug("merging MyLink instance");
        try {
            MyLink result = (MyLink) getSession()
                    .merge(detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public void attachDirty(MyLink instance) {
        log.debug("attaching dirty MyLink instance");
        try {
            getSession().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
    
    public void attachClean(MyLink instance) {
        log.debug("attaching clean MyLink instance");
        try {
            getSession().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
}